昨天的範例舉的是分類這種一步到位的任務。但遇到需要多步驟推理的問題——例如數學計算、邏輯推理、需要拆解步驟的規劃,如果直接叫模型給答案,常常會得到一個看起來很篤定,實則不對的結果。這時候需要的技巧叫 Chain-of-Thought(CoT,思維鏈)。
LLM 生成回應的方式是一個 token 接一個 token 往下產生,前面產生的內容會影響後面的生成。如果你要求它直接給答案,它就得在還沒有經過任何中間推導的情況下,一次到位地產出結果,遇到需要多步驟邏輯的問題,這種一步到位的猜測很容易出錯。
CoT 的做法很直覺:讓模型把中間的推理過程「寫出來」,再導向最後的答案。因為前面寫出來的推理步驟會成為後面生成的依據,等於讓模型寫出算式,而不是直接寫出答案。
import os
import anthropic
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "一個班級有 32 人,其中 3/8 是男生,女生比男生多幾人?請一步一步推理,最後給出答案。",
}
],
)
print(response.content[0].text)
光是加上「請一步一步推理」這句話,就能讓模型把運算過程攤開來寫,而不是直接跳答案。推理過程本身也可以成為驗證過程與除錯的依據。
你也可以把 Day 7 的 few-shot 技巧跟 CoT 合起來——範例本身就示範「怎麼一步步推理」,不只是給「輸入 → 答案」,而是給「輸入 → 推理過程 → 答案」。這種寫法在複雜任務上通常比單純一句「請一步一步推理」更穩定,代價當然是 prompt 更長。
值得注意的是,現在不少主流模型本身就有「延伸思考」(extended thinking)的能力,是模型層級的功能,不是單純靠 prompt 技巧導出推理過程。這種內建機制通常是透過 API 參數開關,而不是在 prompt 裡加一句「請一步一步想」。這塊在不同廠商、不同模型版本上的支援狀況跟參數寫法都不太一樣,實際使用的時候建議參考官方文件。
不管是靠 prompt 技巧引導,還是模型內建的推理機制,目的都是讓模型寫下「推導過程」,而不是直接產出答案。
推理過程本身會佔用不少 output token——你等於是花錢讓模型把「草稿」也生成出來。對簡單、不需要推理的任務(例如昨天的情緒分類),硬要加 CoT 容易導致 token 浪費、回應時間被拉長,沒有實質的好處。CoT 的使用時機,取決於任務本身的複雜度。
今天分享了 CoT 的概念,用來增加模型答案的可靠性,避免過度相信模型的能力。
到目前為止,prompt 的優化都是憑我們的感覺在作調整,但優化只靠感覺是不可靠的,明天就來討論一下,如何系統化的比較 Prompt 之間的差異。